package com.ruoyi.server.api.wxlogin.service.impl;


import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.exception.errorCode.EmErrorCode;
import com.ruoyi.server.api.wxlogin.entiy.WxLoginVo;
import com.ruoyi.server.api.wxlogin.entiy.WxUser;
import com.ruoyi.server.api.wxlogin.mapper.WxLoginMapper;
import com.ruoyi.server.api.wxlogin.service.WxLoginService;
import com.ruoyi.server.api.wxlogin.util.WXUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Example;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.Random;


/**
 * @Description TODO 小程序微信授权登录
 * @ClassName UserLoginServiceImpl
 * @Author HH
 * @Date 2023/4/3 18:22
 **/
@Service
@Slf4j
public class WxLoginServiceImpl implements WxLoginService {

    @Autowired
    WxLoginMapper wxLoginMapper;
    /**
     * 默认名称前缀
     */
    private final static String DEFAULT_NICKNAME_PREFIX = "YL_";
    /**
     * 默认头像id
     */
    private final static Integer DEFAULT_IMAGE_ID = 788;



    /**
     * @Description 获取openid
     * @Author HH
     * @Date 2023/4/11 8:28
     * @Return java.lang.String
     */
    @Override
    public JSONObject getOpenid(String code) {
        JSONObject jsonObject = WXUtils.getOpenid(code);
        return jsonObject;
    }


//    /**
//     * @param user
//     * @Description 小程序微信授权用户登录
//     * @Author HH
//     * @Date 2023/4/10 18:47
//     * @Return com.zhuiYun.project.common.response.AjaxResult
//     */
//    @Override
//    @Transactional
//    public AjaxResult login(AppUserModel user) {
//        //获取openId
//        String openId = user.getOpenId();
//        User userInfo = new User();
//        //将model转换成user
//        BeanUtils.copy(user, userInfo);
//        //根据手机号查询用户信息
//        userInfo = this.getUserByPhone(user.getUserPhone());
//        //未注册过，登录
//        if (!ObjectUtils.isNotEmpty(userInfo)) {
//            userInfo = new User();
//            userInfo.setUserPhone(user.getUserPhone());
//            //首次登录
//            userInfo = this.addUserFirst(userInfo);
//            //判断是否添加成功
//            if (userInfo == null) {
//                return AjaxResult.error(EmErrorCode.USER_ADD_LOGIN);
//            }
//        }
//        WxUser wxUser = this.queryWxUserByOpenId(openId);
//        //登录的userId
//        Integer userId = userInfo.getId();
//        //判断openId是否存在
//        if (ObjectUtils.isNotEmpty(wxUser)) {
//            wxUser.setLastUserId(userId);
//            //判断该user是否曾经在该微信号上登录过
//            String userIds = wxUser.getUserId();
//            //分割
//            String[] userIdArr = userIds.split(",");
//            //遍历
//            long count = Arrays.stream(userIdArr).filter(s -> s.equals(userId.toString())).count();
//            //存在
//            if (count < 1) {
//                userIds = userIds + "," + userInfo.getId();
//                wxUser.setUserId(userIds);
//            }
//            //修改
//            if (wxLoginMapper.updateByPrimaryKeySelective(wxUser) < 0) {
//                return AjaxResult.error(EmErrorCode.USER_ADD_LOGIN);
//            }
//            //存在
//        } else {
//            //赋值
//            wxUser =new WxUser();
//            wxUser.setOpenId(openId);
//            wxUser.setLastUserId(userId);
//            wxUser.setDelFlag(0);
//            wxUser.setCreateTime(new Date());
//            wxUser.setUpdateTime(new Date());
//            wxUser.setUserId(userInfo.getId().toString());
//            //创建
//            if (wxLoginMapper.insert(wxUser) < 0) {
//                return AjaxResult.error(EmErrorCode.USER_ADD_LOGIN);
//            }
//        }
//        // 生成token
//        String token = JWTUtils.createAccessToken(userInfo,openId);
//        // 设置token过期时间
//        RedisUtil.set(token,userInfo,JWTConfig.expiration);
//        RedisUtil.set(userInfo.getUserPhone(),token,JWTConfig.expiration);
//        token = JWTConfig.tokenPrefix + token;
//        HashMap<String,Object> hashMap = new HashMap<>();
//        hashMap.put("imageId",userInfo.getImageId());
//        hashMap.put("token", token);
//        hashMap.put("userId", userInfo.getId());
//        hashMap.put("userType", userInfo.getUserType());
//        hashMap.put("userName", userInfo.getUserName());
//        hashMap.put("userPhone", userInfo.getUserPhone());
//        return AjaxResult.ok(hashMap);
//    }



    /**
     * @param wxLoginVo
     * @Author kdj
     * @Description 根据微信绑定的手机号快捷登录
     * @Date 2023/6/17 18:30
     * @Return com.zhuiyun.project.common.response.AjaxResult
     */
    public String getPhoneNum(String code) {
        //获取手机号
        String phone = WXUtils.getPhoneNumber(code);
        log.info("手机号:{}", phone);
        return phone;
    }




}
